﻿
Imports System.Data.SqlClient

Public Class Usuarios
    Private Const ConnectionString As String = "Data Source=JOSETH-PC\JOSETH09;Initial Catalog=Banco;Integrated Security=True"

    Function Listar() As List(Of Banco.BE.Usuarios)

        Dim lista As New List(Of Banco.BE.Usuarios)
        Dim conexion As New SqlClient.SqlConnection
        Dim comando As New SqlClient.SqlCommand
        conexion.ConnectionString = ConnectionString

        comando.Connection = conexion
        comando.CommandType = CommandType.StoredProcedure
        comando.CommandText = "UsuariosListar"

        Dim lector As SqlClient.SqlDataReader

        Try
            conexion.Open()
            lector = comando.ExecuteReader()

            If lector.HasRows Then

                While lector.Read
                    Dim usuario As New BE.Usuarios
                    usuario.Id = CInt(lector.GetValue(0))
                    usuario.NombreCompleto = lector.GetValue(1).ToString
                    usuario.Identificacion = lector.GetValue(2).ToString
                    usuario.NombreUsuario = lector.GetValue(3).ToString
                    usuario.Contraseña = lector.GetValue(4)
                    usuario.Perfil = CInt(lector.GetValue(5))
                    usuario.Estado = CInt(lector.GetValue(6))
                    usuario.FechaCreacion = CDate(lector.GetValue(7))
                    lista.Add(usuario)
                End While


            End If
        Catch ex As Exception
            Throw New Exception("Problemas al listar")
        Finally
            conexion.Close()
        End Try


        Return lista

    End Function

    Sub Agregar(ByVal usuario As Banco.BE.Usuarios)
        Dim sqlConnection As SqlConnection = New SqlConnection()
        Dim sqlCommand As SqlCommand = New SqlCommand()

        Try
            sqlConnection.ConnectionString = ConnectionString


            sqlCommand.Parameters.Add(New SqlParameter("Id", usuario.Id))
            sqlCommand.Parameters.Add(New SqlParameter("NombreCompleto", usuario.NombreCompleto))
            sqlCommand.Parameters.Add(New SqlParameter("Identificacion", usuario.Identificacion))
            sqlCommand.Parameters.Add(New SqlParameter("NombreUsuario", usuario.NombreUsuario))
            sqlCommand.Parameters.Add(New SqlParameter("Contraseña", usuario.Contraseña))
            sqlCommand.Parameters.Add(New SqlParameter("Perfil", usuario.Perfil))
            sqlCommand.Parameters.Add(New SqlParameter("Estado", usuario.Estado))
            sqlCommand.Parameters.Add(New SqlParameter("FechaCreacion", usuario.FechaCreacion))

            sqlConnection.Open()

            sqlCommand.CommandText = "UsuariosAgregar"
            sqlCommand.CommandType = CommandType.StoredProcedure
            sqlCommand.Connection = sqlConnection
            sqlCommand.ExecuteNonQuery()
            sqlConnection.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Insertar en la Bd" & Ex.ToString)
        Finally
            If sqlConnection.State <> ConnectionState.Closed Then
                sqlConnection.Close()
            End If
        End Try

    End Sub

    Function Editar(ByVal usuario As Banco.BE.Usuarios) As Boolean
        Dim sqlConnection As SqlConnection = New SqlConnection()
        Dim sqlCommand As SqlCommand = New SqlCommand()

        Try
            sqlConnection.ConnectionString = ConnectionString

            sqlCommand.Parameters.Add(New SqlParameter("Id", usuario.Id))
            sqlCommand.Parameters.Add(New SqlParameter("NombreCompleto", usuario.NombreCompleto))
            sqlCommand.Parameters.Add(New SqlParameter("Identificacion", usuario.Identificacion))
            sqlCommand.Parameters.Add(New SqlParameter("NombreUsuario", usuario.NombreUsuario))
            sqlCommand.Parameters.Add(New SqlParameter("Contraseña", usuario.Contraseña))
            sqlCommand.Parameters.Add(New SqlParameter("Perfil", usuario.Perfil))
            sqlCommand.Parameters.Add(New SqlParameter("Estado", usuario.Estado))
            sqlCommand.Parameters.Add(New SqlParameter("FechaCreacion", usuario.FechaCreacion))


            sqlConnection.Open()

            sqlCommand.CommandText = "UsuariosEditar"
            sqlCommand.CommandType = CommandType.StoredProcedure
            sqlCommand.Connection = sqlConnection
            sqlCommand.ExecuteNonQuery()
            sqlConnection.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Editar en la Bd" & Ex.ToString)
            Return False
        Finally
            If sqlConnection.State <> ConnectionState.Closed Then
                sqlConnection.Close()
            End If
        End Try

        Return True
    End Function

    Function Obtener(ByVal id As Integer) As Banco.BE.Usuarios
        Dim sqlConnection As SqlConnection = New SqlConnection()
        Dim sqlCommand As SqlCommand = New SqlCommand()
        Dim myReader As SqlDataReader
        Dim resultado As Banco.BE.Usuarios = Nothing

        Try
            sqlConnection.ConnectionString = ConnectionString

            sqlConnection.Open()

            sqlCommand.CommandText = "UsuariosInformacion"
            sqlCommand.CommandType = CommandType.StoredProcedure
            sqlCommand.Connection = sqlConnection

            sqlCommand.Parameters.Add(New SqlParameter("Id", id))

            myReader = sqlCommand.ExecuteReader()

            If myReader.HasRows Then
                Do While myReader.Read()
                    resultado = New Banco.BE.Usuarios
                    resultado.NombreCompleto = myReader.GetValue(0).ToString
                    resultado.Identificacion = myReader.GetValue(1).ToString
                    resultado.NombreUsuario = myReader.GetValue(2).ToString
                    resultado.Contraseña = myReader.GetValue(3).ToString
                    resultado.Perfil = CInt(myReader.GetValue(4))
                    resultado.Estado = CInt(myReader.GetValue(5))
                    resultado.FechaCreacion = CDate(myReader.GetValue(6))
                Loop

            End If

            myReader.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Obtener" & Ex.ToString)
        Finally

            If sqlConnection.State <> ConnectionState.Closed Then
                sqlConnection.Close()
            End If
        End Try


        Return resultado
    End Function

    Function CambiaEstado(ByVal estado As Banco.BE.Usuarios) As Boolean
        Dim sqlConnection As SqlConnection = New SqlConnection()
        Dim sqlCommand As SqlCommand = New SqlCommand()

        Try
            sqlConnection.ConnectionString = ConnectionString

            sqlCommand.Parameters.Add(New SqlParameter("Id", estado.Id))
            sqlCommand.Parameters.Add(New SqlParameter("Estado", estado.Estado))

            sqlConnection.Open()

            sqlCommand.CommandText = "UsuariosCambiaEstado"
            sqlCommand.CommandType = CommandType.StoredProcedure
            sqlCommand.Connection = sqlConnection
            sqlCommand.ExecuteNonQuery()
            sqlConnection.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Cambiar estado en la base de datos" & Ex.ToString)
            Return False
        Finally
            If sqlConnection.State <> ConnectionState.Closed Then
                sqlConnection.Close()
            End If
        End Try

        Return True
    End Function

    Function IniciarSecion(ByVal datos As Banco.BE.Usuarios) As Banco.BE.Usuarios
        Dim sqlConnection As SqlConnection = New SqlConnection()
        Dim sqlCommand As SqlCommand = New SqlCommand()
        Dim myReader As SqlDataReader
        Dim resultado As Banco.BE.Usuarios = Nothing

        Try
            sqlConnection.ConnectionString = ConnectionString

            sqlCommand.Parameters.Add(New SqlParameter("NombreUsuario", datos.NombreUsuario))
            sqlCommand.Parameters.Add(New SqlParameter("Contraseña", datos.Contraseña))

            sqlConnection.Open()

            sqlCommand.CommandText = "UsuariosIniciarSecion"
            sqlCommand.CommandType = CommandType.StoredProcedure
            sqlCommand.Connection = sqlConnection

            myReader = sqlCommand.ExecuteReader()

            If myReader.HasRows Then
                Do While myReader.Read()
                    resultado = New Banco.BE.Usuarios
                    resultado.Id = CInt(myReader.GetValue(0))
                    resultado.NombreUsuario = myReader.GetValue(1).ToString
                    resultado.Perfil = CInt(myReader.GetValue(2))
                    resultado.Estado = CInt(myReader.GetValue(3))
                Loop

            End If

            sqlConnection.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas con la base de datos" & Ex.ToString)
            Return resultado
        Finally
            If sqlConnection.State <> ConnectionState.Closed Then
                sqlConnection.Close()
            End If
        End Try

        Return resultado
    End Function

    Function Activo() As List(Of Banco.BE.Usuarios)

        Dim coneccion As SqlConnection = New SqlConnection()
        Dim comando As SqlCommand = New SqlCommand()
        Dim lector As SqlDataReader
        Dim lista As New List(Of Banco.BE.Usuarios)

        Try
            coneccion.ConnectionString = ConnectionString

            coneccion.Open()

            comando.CommandText = "UsuariosListar"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = coneccion

            lector = comando.ExecuteReader()

            If lector.HasRows Then
                Do While lector.Read()

                    Dim mantenimiento As New Banco.BE.Usuarios
                    mantenimiento.Estado = CInt(lector.GetValue(6))

                    If mantenimiento.Estado <> 1 Then


                        mantenimiento.Id = CInt(lector.GetValue(0))
                        mantenimiento.NombreCompleto = lector.GetValue(1).ToString
                        mantenimiento.Identificacion = lector.GetValue(2).ToString
                        mantenimiento.NombreUsuario = lector.GetValue(3).ToString
                        mantenimiento.Contraseña = lector.GetValue(4).ToString
                        mantenimiento.Perfil = CInt(lector.GetValue(5))
                        mantenimiento.FechaCreacion = CDate(lector.GetValue(7))
                        lista.Add(mantenimiento)

                    End If

                Loop

            End If

            lector.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al listar" & Ex.ToString)
        Finally

            If coneccion.State <> ConnectionState.Closed Then
                coneccion.Close()
            End If
        End Try


        Return lista

    End Function

    Function Inactivo() As List(Of Banco.BE.Usuarios)

        Dim coneccion As SqlConnection = New SqlConnection()
        Dim comando As SqlCommand = New SqlCommand()
        Dim lector As SqlDataReader
        Dim lista As New List(Of Banco.BE.Usuarios)

        Try
            coneccion.ConnectionString = ConnectionString

            coneccion.Open()

            comando.CommandText = "UsuariosListar"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = coneccion

            lector = comando.ExecuteReader()

            If lector.HasRows Then
                Do While lector.Read()

                    Dim mantenimiento As New Banco.BE.Usuarios
                    mantenimiento.Estado = CInt(lector.GetValue(6))

                    If mantenimiento.Estado <> 0 Then


                        mantenimiento.Id = CInt(lector.GetValue(0))
                        mantenimiento.NombreCompleto = lector.GetValue(1).ToString
                        mantenimiento.Identificacion = lector.GetValue(2).ToString
                        mantenimiento.NombreUsuario = lector.GetValue(3).ToString
                        mantenimiento.Contraseña = lector.GetValue(4).ToString
                        mantenimiento.Perfil = CInt(lector.GetValue(5))
                        mantenimiento.FechaCreacion = CDate(lector.GetValue(7))
                        lista.Add(mantenimiento)

                    End If

                Loop

            End If

            lector.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al listar" & Ex.ToString)
        Finally

            If coneccion.State <> ConnectionState.Closed Then
                coneccion.Close()
            End If
        End Try


        Return lista

    End Function

    Function FiltrarIdentificacion(ByVal iden As String) As List(Of Banco.BE.Usuarios)

        Dim coneccion As SqlConnection = New SqlConnection()
        Dim comando As SqlCommand = New SqlCommand()
        Dim lector As SqlDataReader
        Dim lista As New List(Of Banco.BE.Usuarios)

        Try
            coneccion.ConnectionString = ConnectionString

            coneccion.Open()

            comando.CommandText = "UsuarioFiltrarIdentificacion"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = coneccion
            comando.Parameters.Add(New SqlParameter("Identificacion", iden))
            lector = comando.ExecuteReader()



            If lector.HasRows Then
                Do While lector.Read()

                    Dim mantenimiento As New Banco.BE.Usuarios
                    mantenimiento.Estado = CInt(lector.GetValue(6))


                    mantenimiento.Id = CInt(lector.GetValue(0))
                    mantenimiento.NombreCompleto = lector.GetValue(1).ToString
                    mantenimiento.Identificacion = lector.GetValue(2).ToString
                    mantenimiento.NombreUsuario = lector.GetValue(3).ToString
                    mantenimiento.Contraseña = lector.GetValue(4).ToString
                    mantenimiento.Perfil = CInt(lector.GetValue(5))
                    mantenimiento.FechaCreacion = CDate(lector.GetValue(7))
                    lista.Add(mantenimiento)


                Loop

            End If

            lector.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al listar" & Ex.ToString)
        Finally

            If coneccion.State <> ConnectionState.Closed Then
                coneccion.Close()
            End If
        End Try


        Return lista

    End Function

    Function FiltrarNombres(ByVal nombre As String) As List(Of Banco.BE.Usuarios)

        Dim coneccion As SqlConnection = New SqlConnection()
        Dim comando As SqlCommand = New SqlCommand()
        Dim lector As SqlDataReader
        Dim lista As New List(Of Banco.BE.Usuarios)

        Try
            coneccion.ConnectionString = ConnectionString

            coneccion.Open()

            comando.CommandText = "UsuarioFiltrarNombres"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = coneccion
            comando.Parameters.Add(New SqlParameter("NombreCompleto", nombre))
            lector = comando.ExecuteReader()



            If lector.HasRows Then
                Do While lector.Read()

                    Dim mantenimiento As New Banco.BE.Usuarios
                    mantenimiento.Estado = CInt(lector.GetValue(6))


                    mantenimiento.Id = CInt(lector.GetValue(0))
                    mantenimiento.NombreCompleto = lector.GetValue(1).ToString
                    mantenimiento.Identificacion = lector.GetValue(2).ToString
                    mantenimiento.NombreUsuario = lector.GetValue(3).ToString
                    mantenimiento.Contraseña = lector.GetValue(4).ToString
                    mantenimiento.Perfil = CInt(lector.GetValue(5))
                    mantenimiento.FechaCreacion = CDate(lector.GetValue(7))
                    lista.Add(mantenimiento)


                Loop

            End If

            lector.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al listar" & Ex.ToString)
        Finally

            If coneccion.State <> ConnectionState.Closed Then
                coneccion.Close()
            End If
        End Try


        Return lista

    End Function

    Function restriccion1(ByVal nombreUsuario As String) As Boolean
        Dim sqlConnection As SqlConnection = New SqlConnection()
        Dim sqlCommand As SqlCommand = New SqlCommand()
        Dim myReader As SqlDataReader
        Dim resultado As Boolean = False

        Try
            sqlConnection.ConnectionString = ConnectionString

            sqlConnection.Open()

            sqlCommand.CommandText = "UsuariosRestriccionNombre"
            sqlCommand.CommandType = CommandType.StoredProcedure
            sqlCommand.Connection = sqlConnection

            sqlCommand.Parameters.Add(New SqlParameter("NombreUsuario", nombreUsuario))

            myReader = sqlCommand.ExecuteReader()

            If myReader.HasRows Then

                resultado = True

            End If

            myReader.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Obtener" & Ex.ToString)
        Finally

            If sqlConnection.State <> ConnectionState.Closed Then
                sqlConnection.Close()
            End If
        End Try


        Return resultado
    End Function
End Class
